import * as THREE from '../../build/three.module.js';

/**
 * threejs 中很多对象都有 .copy 方法，用于将一个对象的属性赋值给另一个同类型对象
 */

let p1 = new THREE.Vector3(1, 2, 3);
let p2 = new THREE.Vector3(0, 0, 0);
p2.copy(p1); // 表示 p2 复制 p1 的属性值给自己
console.log(p2);

let p3 = p1.clone();
console.log(p3);

/**
 * 上面的复制和克隆都是简单的赋值引用，但在对网格对象进行复制和克隆时
 * mesh.geometry 和 mesh.material 等属性都是索引赋值
 */
let box = new THREE.BoxGeometry(11, 11, 11);
let mat = new THREE.MeshBasicMaterial({ color: 0x0000ff });

let mesh1 = new THREE.Mesh(box, mat);
let mesh2 = mesh1.clone();
console.log(mesh1.geometry === mesh2.geometry); // true
// 这意味着如果mesh1的geometry发生变化，mesh2也会跟着变


/**
 * 几何体实例也有复制和克隆方法，与网格模型不一样，geometry.vertices 拷贝克隆时会进行深拷贝
 */

// 拷贝克隆方法针对不同实例类型有不同的操作，需要在实践中慢慢摸索总结